#include "AlfaBeta.h"
#include "Nodo.h"
#include <limits.h>

AlfaBeta::AlfaBeta() {
}

int AlfaBeta::BuscarAlfaBeta(Nodo *nodo, int profundidad, int a, int b){
    if( nodo->esTerminal() || (profundidad == 0) ){
        return nodo->Valor();
    }
   
    //Iterador de los hijos:
    Nodo::Iterador it(nodo, true); // Hay q ver como se acomoda el ordenamiento (ver la descripcion de la funcion)
   
    Nodo *hijo;
    while(hijo = it.Siguiente()) {
       
        a = max(a, -BuscarAlfaBeta(hijo, profundidad - 1, -b, -a));
       
        delete hijo;
       
        if( b <= a ) break;
    }
   
    return a;
}

int AlfaBeta::Buscar(Nodo *nodo, int profundidad){
    return BuscarAlfaBeta(nodo, profundidad, INT_MAX, INT_MIN);
}


AlfaBeta::~AlfaBeta() {
}

